// app/controller/user.js
const Controller = require('egg').Controller;
const tokenUtils = require('../utils/token');
 
class UserController extends Controller {
  // 根据id查询用户信息
  async getUserById () {
    const ctx = this.ctx
    const id = ctx.params.id; // 从请求中获取用户ID
    if (!id) {
      // 如果id不存在
      ctx.body = {
        code: 400,
        message: '缺少参数id'
      }
      return
    }
    const user = await ctx.service.user.getUserById(id); // 调用Service层获取用户信息
    if (user) {
      ctx.body = {
        code: 200,
        data: user,
        message: '请求成功'
      }; // 将用户信息返回给客户端
    } else {
      ctx.body = {
        code: 401,
        message: '未找到数据'
      }
    }
  }
  // 登录
  async postLogin () {
    const { ctx } = this
    // 获取请求体中数据
    const requestData = ctx.request.body || {account: 'admin', password: '123456'}
    const { account, password } = requestData
    if (!account || !password) {
      ctx.body = {
        code: 400,
        message: '缺少账号或密码',
      };
      return;
    }

    // 验证用户的账号和密码
    const user = await this.service.user.findByAccount(account);
    if (!user) {
      ctx.body = {
        code: 401,
        message: '账号不存在, 请联系管理员添加账号',
      };
      return;
    } else {
      // 账号存在(判断密码是否正确)
      if (!(user.password === password)) {
        ctx.body = {
          code: 401,
          message: '密码错误'
        }
        return
      }
    }
    // 获取token(加密)
    const token = tokenUtils.generateToken({...requestData, id: user.id}, this.app.config.jwtSecret)
    // 登录成功
    ctx.body = {
      code: 200,
      message: '登陆成功',
      token,
      data: {
        userInfo: user,
        permissions: user.permissions || []
      },
    }
  }
}
 
module.exports = UserController;
